#pragma once

#include <map>
#include <vector>
#include "C:\Bullet\src\btBulletDynamicsCommon.h"
#include "HashedString.h"
#include "Pointer.h"
#include "Quaternion.h"
#include "Vector3D.h"

class IShape
{
public:
	typedef std::vector<Pointer<IShape>> Vector_t;
	typedef std::multimap<HashedString, Pointer<IShape>> Map_t;
	typedef std::pair<HashedString, Pointer<IShape>> Pair_t;

	IShape();

	virtual const HashedString& Type() const = 0;
	virtual std::string ToString() const = 0;
	Pointer<btCollisionShape>& getShape();
	void setOffset( Maths::Vector3D& offset, Maths::Quaternion& rotation );

	btTransform& getLocalOffset();
protected:
	Pointer<btCollisionShape> m_bulletShape;
	btTransform m_localOffset;
};